package com.xue.first;

import java.util.*;

public class CollectionTest {
    public static void main(String[] args) {
        test01();
        test04();
    }

    /**
     * 集合工具类：Comparator接口（匿名内部类方式，暂不作要求）
     */
    private static void test04() {
        // 创建一个List数组
        List<Monitor> lst0 = new ArrayList<>();
        // 添加元素
        lst0.add(new Monitor("zhangsan", "150001", 70));
        lst0.add(new Monitor("lisi", "150002", 60));
        lst0.add(new Monitor("wangwu", "150003", 90));
        // 排序算法
        System.out.println("使用集合工具类的sort方法进行排序：");
        Collections.sort(lst0, new Comparator<Monitor>() {
            @Override
            public int compare(Monitor o1, Monitor o2) {
                // 默认返回值
                int iVal = 0;
                if (o1 != null && o2 != null) {
                    // 比较o1和o2的大小
                    if (o1.getStuScore() > o2.getStuScore()) {
                        iVal = 1;
                    } else if (o1.getStuScore() < o2.getStuScore()) {
                        iVal = -1;
                    }
                }
                return iVal*-1;
            }
        });
        System.out.println("List排序之后的内容为：");
        printList(lst0);
    }

    /**
     * 集合工具类：Comparator接口
     */
    private static void test03() {
        // 创建一个List数组
        List<Monitor> lst0 = new ArrayList<>();
        // 添加元素
        lst0.add(new Monitor("zhangsan", "150001", 70));
        lst0.add(new Monitor("lisi", "150002", 60));
        lst0.add(new Monitor("wangwu", "150003", 90));
        // 排序算法
        System.out.println("使用集合工具类的sort方法进行排序：");
        Collections.sort(lst0,new MonitorComparator());
        System.out.println("List排序之后的内容为：");
        printList(lst0);
    }

    /**
     * 集合工具类：Comparable接口和TreeSet
     */
    private static void test021() {
        // 创建一个TreeSet对象
        Set<Teacher> set0 = new TreeSet<>();
        // 创建一个Teacher对象
        Teacher tea0 = new Teacher();
        set0.add(tea0);
        Teacher tea1 = new Teacher();
        set0.add(tea1);
        for (Teacher t : set0) {
            System.out.println("  " + t);
        }
    }

    /**
     * 集合工具类：Comparable接口
     */
    private static void test02() {
        // 创建一个List数组
        List<Student> lst0 = new ArrayList<>();
        // 添加元素
        lst0.add(new Student("zhangsan", "150001", 70));
        lst0.add(new Student("lisi", "150002", 60));
        lst0.add(new Student("wangwu", "150003", 90));
        // 排序算法
        System.out.println("使用集合工具类的sort方法进行排序：");
        Collections.sort(lst0);
        System.out.println("List排序之后的内容为：");
        printList(lst0);
    }

    /**
     * 集合工具类：Collections
     */
    private static void test01() {
        // 创建一个List数组
        List<String> lst0 = new ArrayList<>();
        // 添加元素
        lst0.add("zhangsan");
        lst0.add("lisi");
        lst0.add("wangwu");
        lst0.add("zhaoliu");
        // 打印原始的list元素內容
        System.out.println("List內的初始化元素內容为：");
        printList(lst0);
        // max方法
        String strMax = Collections.max(lst0);
        System.out.println("List中的最大元素为：" + strMax);
        // 随机打乱顺序
        Collections.shuffle(lst0); // 采用的是按引用传参
        System.out.println("List打乱顺序之后：");
        printList(lst0);
        // 排序算法
        System.out.println("使用集合工具类的sort方法进行排序：");
        Collections.sort(lst0);
        System.out.println("List排序之后的内容为：");
        printList(lst0);
        // 折半查找算法（先排序）
        int index = Collections.binarySearch(lst0, "lisi");
        System.out.println("折半查找结果：" + (index > -1 ? "找到，下标为" + index : "没有找到"));
    }

    /**
     * 打印list中的元素内容
     *
     * @param lst 被打印的list对象
     */
    private static void printList(List lst) {
        if (lst != null) {
            // 打印每个元素
            for (Object str : lst) {
                System.out.println("   " + str);
            }
            System.out.println();
        }
    }
}